var _n37;
var cc__extends = __extends;
var cc__decorate = __decorate;
var cc__importDefault = __importDefault;
Object.defineProperty(exports, "__esModule", {
  value: true
});
var $1$yyComponent = require("yyComponent");
var s = cc__importDefault($1$yyComponent);
var $1$RankMgr = require("RankMgr");
var c = cc__importDefault($1$RankMgr);
var $1$home = require("zqcc_home");
var l = cc__importDefault($1$home);
var $1$homeRankItem = require("homeRankItem");
var u = cc__importDefault($1$homeRankItem);
var $1$rankingList = require("rankingList");
var p = cc__importDefault($1$rankingList);
var $1$rankingObj = require("rankingObj");
var d = cc__importDefault($1$rankingObj);
var cc__decorator = cc._decorator;
var ccp_ccclass = cc__decorator.ccclass;
var ccp_property = cc__decorator.property;
var def_ScrollViewExample = function (t) {
  function _ctor() {
    // 使用 apply 方法调用 t，或者使用当前上下文
    var instance = null !== t && t.apply(this, arguments) || this;

    // 初始化实例属性
    instance.itemPrefab = null;
    instance.content = null;
    instance.scrollView = null;
    instance.itemHeight = 400; // 每个项的高度
    instance.initCreatorNum = 4; // 初始化创建的项目数量
    instance.bottom = 200; // 底部距离
    instance.itemsPool = []; // 项目池
    instance.items = []; // 当前项列表
    instance.data = null; // 数据
    instance.oldPos = null; // 旧位置
    instance.curTag = -1; // 当前标签
    instance.isMoveTop = false; // 是否向上移动
    instance.managerScript = null; // 管理脚本
    instance.move = false; // 是否正在移动

    return instance; // 返回实例
  }
  cc__extends(_ctor, t);
  _ctor.prototype.onLoad = function () {
    // 获取数据配置
    this.getDataConfig();

    // 初始化项目
    for (var index = 0; index < this.initCreatorNum; ++index) {
      var item = cc.instantiate(this.itemPrefab); // 实例化项目
      this.content.addChild(item); // 添加到内容节点
      this.itemsPool.push(item); // 将项目添加到池中
      item.active = false; // 设置项目为不可见
    }

    // 设置内容的高度
    this.content.height = (this.itemHeight * this.data.cityRankInfo.length) + this.bottom;

    // 填充内容
    this.fillContent();

    // 保存旧位置
    this.oldPos = this.content.position;

    // 获取管理脚本
    this.managerScript = this.node.parent.getComponent(l.default);

    // 调用滑动函数
    this.huadong();
  };
  _ctor.prototype.getDataConfig = function () {
    var rank_info = this.node.getComponent(c.default).getRankInfo();
    this.data = rank_info;
  };
  _ctor.prototype.fillContent = function () {
    // 渲染城市排名信息项
    for (var index = 0; index < this.data.cityRankInfo.length && index < this.initCreatorNum; ++index) {
      // 调用 renderItem 方法，传入索引和计算出的垂直位置
      this.renderItem(index, -this.itemHeight * (0.5 + index));
    }
  };
  _ctor.prototype.renderItem = function (t, e) {
    // 从项目池中取出最后一个项目
    var item = this.itemsPool.pop();

    // 如果池为空，则实例化一个新的项目
    if (!item) {
      item = cc.instantiate(this.itemPrefab);
      this.content.addChild(item); // 将新项目添加到内容节点
    }

    // 设置项目位置
    item.setPosition(new cc.Vec3(0, e, 0));

    // 设置项目为可见
    item.active = true;

    // 将项目添加到当前项目列表
    this.items.push(item);
  };
  _ctor.prototype.getCurYPos = function (t) {
    return this.itemHeight * t;
  };
  _ctor.prototype.update = function () {
    this.huadong();
  };
  _ctor.prototype.huadong = function () {
    // 获取当前索引位置
    var currentIndex = this.getCurSuoYinPos();

    // 检查索引是否有效以及是否需要更新内容位置
    if (currentIndex === -1 ||
      currentIndex >= this.data.cityRankInfo.length - this.initCreatorNum + 1 ||
      this.curTag !== currentIndex) {

      // 更新内容位置
      this.renewContentPos(currentIndex);

      // 更新当前标签
      this.curTag = currentIndex;
    }
  };
  _ctor.prototype.renewShow = function () {
    // 创建一个引用当前上下文的变量
    var context = this;

    // 安排一次性定时任务
    this.scheduleOnce(function () {
      cc.log("更新显示"); // 记录日志

      // 获取当前索引位置
      var currentIndex = context.getCurSuoYinPos();

      // 更新内容位置
      context.renewContentPos(currentIndex);

      // 更新当前标签
      context.curTag = currentIndex;
    });
  };
  _ctor.prototype.getCurSuoYinPos = function () {
    // 计算当前内容的垂直偏移量
    var verticalOffset = this.content.y - this.oldPos.y - 300;
    var currentIndex = 0;

    // 遍历城市排名信息
    for (var index = 0; index < this.data.cityRankInfo.length; index++) {
      // 获取当前项和下一项的Y坐标
      var currentYPos = this.getCurYPos(index);
      var nextYPos = this.getCurYPos(index + 1);

      // 检查当前Y坐标是否在范围内
      if (currentYPos <= verticalOffset && nextYPos > verticalOffset) {
        currentIndex = index; // 更新索引
        break; // 找到后退出循环
      }
    }

    return currentIndex; // 返回找到的索引
  };
  _ctor.prototype.renewContentPos = function (t) {
    // 根据当前标签决定项目的移动方式
    if (this.curTag < t) {
      // 移动第一项到末尾
      var movedItem = this.items.splice(0, 1);
      this.items.push(movedItem[0]);
    } else {
      // 移动最后一项到开头
      var lastItem = this.items.pop();
      this.items.unshift(lastItem);
    }

    // 如果节点的父名称为 "content"，则排序城市排名信息
    var managerComponent = null;
    if (this.node.parent.name === "content") {
      managerComponent = this.node.parent.parent.getComponent(p.default);

      if (managerComponent) {
        this.data.cityRankInfo.sort(function (a, b) {
          if (managerComponent.initSelectMode === 1) {
            return b.grade - a.grade; // 按等级降序排序
          } else if (managerComponent.initSelectMode === 2) {
            return b.university - a.university; // 按大学降序排序
          } else {
            return 0; // 不做排序
          }
        });
      }
    }

    // 更新每个项目的位置和内容
    for (var i = 0; i < this.items.length; i++) {
      var currentItem = this.items[i];
      currentItem.position = cc.v3(0, -this.getCurYPos(i + t) - this.itemHeight / 2, 0);

      var contentComponent = currentItem.getComponent(u.default);
      if (contentComponent) {
        contentComponent.updateContent(this.data, i + t);
      } else {
        var alternativeComponent = currentItem.getComponent(d.default);
        if (alternativeComponent && managerComponent) {
          alternativeComponent.updateContent1(this.data, i + t, managerComponent.initSelectMode);
        }
      }
    }

    // 更新管理脚本中的定位显示
    if (this.managerScript) {
      this.managerScript.renewDingWeiShow(this.isInMyDiQuPos(t + 1));
    }
  };
  _ctor.prototype.moveShiTuToPos = function (t) {
    // 当前上下文引用
    var context = this;

    // 输出日志信息
    cc.log("定位～！" + t);

    // 若 t 有效
    if (t !== -1) {
      this.move = true; // 设置移动状态

      // 确保 t 不超过城市排名信息长度的限制
      if (t >= this.data.cityRankInfo.length - 2) {
        t = this.data.cityRankInfo.length - 2;
      }

      // 计算目标位置
      var targetPositionY = t * this.itemHeight + this.oldPos.y;
      var targetPosition = cc.v3(0, targetPositionY, 0);

      // 如果管理脚本设置为移动顶部，则更新目标位置
      if (this.managerScript.isMoveTop) {
        targetPosition = cc.v3(0, this.oldPos.y, 0);
      }

      // 停止自动滚动
      this.scrollView.stopAutoScroll();

      // 创建和启动移动动画
      cc.tween(this.content)
        .to(0.6, { position: targetPosition }) // 持续时间为 0.6 秒
        .call(function () {
          context.move = false; // 动画结束后重置移动状态
        })
        .start();
    }
  };
  _ctor.prototype.isInMyDiQuPos = function (t) {
    return t >= this.data.cityRankInfo.length - 5 || t == this.managerScript.curDingWei;
  };
  cc__decorate([ccp_property(cc.Prefab)], _ctor.prototype, "itemPrefab", undefined);
  cc__decorate([ccp_property(cc.Node)], _ctor.prototype, "content", undefined);
  cc__decorate([ccp_property(cc.ScrollView)], _ctor.prototype, "scrollView", undefined);
  cc__decorate([ccp_property({
    displayName: "生成物品的高"
  })], _ctor.prototype, "itemHeight", undefined);
  cc__decorate([ccp_property({
    displayName: "初始生成的数量"
  })], _ctor.prototype, "initCreatorNum", undefined);
  cc__decorate([ccp_property({
    displayName: "滑动组件向下的延伸长度"
  })], _ctor.prototype, "bottom", undefined);
  return cc__decorate([ccp_ccclass], _ctor);
}(s.default);
exports.default = def_ScrollViewExample;